/**
 * 一些对程序进行debug所用到的工具。
 */

#ifndef _AHAMOLETT_CDS_TEST_TOOL_H_
#define _AHAMOLETT_CDS_TEST_TOOL_H_
#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/// 打印失败的测试用例
#define LOG_TEST_FAIL(fmt,...)  \
    printf("\033[1;31;40m[-FAIL-]\033[0m "  \
        "\033[1;35;40m%s\033[0m: "  \
        "\033[1;36;40m%s()\033[0m[%d]: ",   \
        __FILE__, __func__, __LINE__);  \
    printf(fmt, ##__VA_ARGS__)

/// 打印成功的测试用例
#ifndef TEST_FAIL_ONLY
#define LOG_TEST_PASS(fmt,...)  \
    printf("\033[1;32;40m[-PASS-]\033[0m "  \
        "\033[1;35;40m%s\033[0m: "  \
        "\033[1;36;40m%s()\033[0m[%d]: ",   \
        __FILE__, __func__, __LINE__);  \
    printf(fmt, ##__VA_ARGS__)
#endif

/// 交换两个同类型的变量
#define EXCHANGE_VALS(num1, num2)   do {    \
    typeof(num1) __tmp = (num1);    \
    (num1) = (num2);    \
    (num2) = __tmp; \
} while (0)

#ifdef __cplusplus
}
#endif
#endif